package models;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import play.db.DB;

/**
 * @author edwyn
 */
public class Enquete {

	private int codigo;
	private int codigo_usuario;
	private String pergunta;
	private List<Opcao> opcoes;
	
	public Enquete() {
		setCodigo(-1);
		setCodigo_usuario(-1);
	}
	
	public Enquete(int codigo, int codigo_usuario, String pergunta) {
		this.codigo = codigo;
		this.codigo_usuario = codigo_usuario;
		this.pergunta = pergunta;
		this.opcoes = new ArrayList<Opcao>();
	}
	
	/**
     * Inserts the Evento object in the DB
     */
    public void save() throws SQLException {
    	// executeQuery para pegar o MAX de codigo
    	if(this.codigo == -1) {
    		ResultSet rs = DB.executeQuery("SELECT max(codigo) FROM enquete");
    		rs.next();
    		
    		this.codigo = rs.getInt(1) + 1;
    	} 
    	
    	DB.execute("INSERT INTO Enquete(codigo, codigo_usuario, pergunta) VALUES("
    			+ "'" + Integer.toString(this.codigo) + "',"
    			+ "'" + Integer.toString(this.codigo_usuario) + "',"
    			+ "'" + this.pergunta + "'"
    			+ ")");
    }
    
    public void saveOptions() throws SQLException{
    	Opcao op;
    	for (int i=0; i<this.opcoes.size(); i++){
    		op = this.opcoes.get(i);
    		op.setCodigo_enquete(this.codigo);
    		op.save();
    	}
    }
    
    public static List<Enquete> all() throws SQLException {
    	ResultSet rs = DB.executeQuery("SELECT * FROM enquete");
    	
    	List<Enquete> lista = new ArrayList<Enquete>();
    	
    	while(rs.next()) {
    		Enquete enquete = new Enquete(rs.getInt(1), rs.getInt(2), rs.getString(3));
    		enquete.setOpcoes(Opcao.all(enquete.getCodigo()));
    		lista.add(enquete);
    	}
    	
    	return lista;
    }
    
    public static Enquete find(int codigoEnquete) throws SQLException {
    	ResultSet rs = DB.executeQuery("SELECT * FROM enquete where codigo = '"+codigoEnquete+"'");
    	rs.next();
    	
    	Enquete enq = new Enquete(rs.getInt(1), rs.getInt(2), rs.getString(3));
    	enq.setOpcoes(Opcao.all(enq.getCodigo()));
    	
    	return enq;
    }

    public void adicionarOpcao(Opcao opcao){
    	this.opcoes.add(opcao);
    }
    
    public void removerOpcao(int codigo_opcao){
    	int tam = this.opcoes.size();
    	for (int i=0; i<tam; i++){
    		if (this.opcoes.get(i).getCodigo() == codigo_opcao){
    			this.opcoes.remove(i);
    			i = tam;
    		}
    	}
    }
    
    public int getQtdOpcoes() throws SQLException {
    	ResultSet rs = DB.executeQuery("SELECT count(*) FROM opcao where codigo_enquete = '" + this.codigo
    			+ "' GROUP BY codigo_enquete");
    	if (rs.next()){    	
    		return rs.getInt(1);
    	}else return 0;
    }
    
	/**
	 * @return the codigo
	 */
	public int getCodigo() {
		return codigo;
	}

	/**
	 * @param codigo the codigo to set
	 */
	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	/**
	 * @return the codigo_usuario
	 */
	public int getCodigo_usuario() {
		return codigo_usuario;
	}

	/**
	 * @param codigo_usuario the codigo_usuario to set
	 */
	public void setCodigo_usuario(int codigo_usuario) {
		this.codigo_usuario = codigo_usuario;
	}

	/**
	 * @return the pergunta
	 */
	public String getPergunta() {
		return pergunta;
	}

	/**
	 * @param pergunta the pergunta to set
	 */
	public void setPergunta(String pergunta) {
		this.pergunta = pergunta;
	}

	/**
	 * @return the opcoes
	 */
	public List<Opcao> getOpcoes() {
		return opcoes;
	}

	/**
	 * @param opcoes the opcoes to set
	 */
	public void setOpcoes(List<Opcao> opcoes) {
		this.opcoes = opcoes;
	}
	
	/**
	 * @param codigoEnquete
	 */
	public static void delete(int codigoEnquete) {
    	DB.execute("DELETE FROM enquete WHERE codigo = '" + codigoEnquete + "'");
    }
}
